package com.neouton.crm.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.neouton.common.util.PageUtil;
import com.neouton.crm.approval.entity.ApprovalVO;
import com.neouton.crm.product.entity.ProductInfoVO;
import com.neouton.crm.supplier.entity.SupplierVO;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * @Author gaolin
 * @Date 2022/8/30 16:11
 * @Version 1.0
 */
public interface IProductInfoServer {
    /**
     * 分页查询
     *
     * @param page
     * @param entity
     * @return
     */
    PageUtil<ProductInfoVO> queryProductsByPage(IPage page, ProductInfoVO entity);

    /**
     * 保存、更新接口【通过判断是否存在主键id区分保存和更新】
     * @param entity
     */
    Boolean saveOrUpdateProduct(ProductInfoVO entity,String token);

    /**
     * 一指禅系统产品列表导出
     *
     * @param response
     */
    void exportProductInfo(HttpServletResponse response,ProductInfoVO entit,String state) throws Exception;

    /**
     * 分页查询
     *
     * @param page
     * @param entity
     * @return
     */
    List<ProductInfoVO> queryAllProductsForPur(ProductInfoVO productInfoVO);


    List<SupplierVO> querySuppliers();

    /**
     * 查询全部供应商
     *
     * @return
     */
    List<SupplierVO> queryAllSuppliers();

    /**
     * 审批通过
     * @param approval
     * @return
     */
    Boolean approveProductInfo(ApprovalVO approval,String token,Boolean sendEmail);

    /**
     * 审批驳回
     * @param approval
     * @return
     */
    Boolean rejectionProductInfo(ApprovalVO approval, String token);

    /**
     * 更具工作流ID获取审批信息
     * @param workId
     * @return
     */
    List<ProductInfoVO> querProductApprovalByWorkId(Integer workId);

    /**
     * 更具工作流ID获取产品列表
     * @param approvalId
     * @return
     */
    Map<String,Object>  queryTodoProductsByApprovalId(Integer approvalId);

    /**
     * 更具工作流ID获取产品列表
     * @param approvalId
     * @return
     */
    Map<String,Object>  queryProductApprovalRecordByApprovalId(Integer approvalId);

    /**
     * 更具工作流ID获取产品列表
     * @param approvalId
     * @return
     */
    List<ProductInfoVO>  queryProductsByApprovalId(Integer approvalId);

    /**
     * 产品导入功能
     * @param file
     * @param supperId
     * @param reason
     * @return
     */
    String importProducts( MultipartFile file,Integer supperId,Integer isOneFinger, String reason, String token) throws Exception;

    /**
     * 产品导入模板下载
     * @param response
     * @throws Exception
     */
    void downProductTemplate(HttpServletResponse response) throws Exception;

    /**
     * 更新启用、禁用状态
     * @param productInfo
     * @return
     */
    Boolean updateProductState(ProductInfoVO productInfo);

    /**
     * 如审批驳回则删除导入产品
     * @return
     */
    Boolean deleteProductByApprovalId(Integer approvalId);

    /**
     * 分页查询待办信息
     *
     * @param page
     * @param entity
     * @return
     */
    PageUtil<ProductInfoVO> queryApprovalProductByPage(IPage page, ProductInfoVO entity);


    /**
     * 分页查询已办信息
     *
     * @param page
     * @param entity
     * @return
     */
    PageUtil<ProductInfoVO> queryApprovalProductDoneByPage(IPage page, ProductInfoVO entity);

    /**
     * 分页查询申请记录信息
     *
     * @param page
     * @param entity
     * @return
     */
    PageUtil<ProductInfoVO> queryApprovalProductRecordByPage(IPage page, ProductInfoVO entity,String token);
}
